package myjava.i_collection;

import java.util.*;

/**
 * @Auther: cty
 * @Date: 2019/11/16 上午10:13
 * @Description: 测试迭代器遍历List、Set、Map
 * @version: 1.0
 */
public class M_TestIterator {
    public static void main(String[] args) {
        testIteratorList();
        testIteratorSet();
        testIteratorMap();
    }

    /* 测试遍历List方法 */
    public static void testIteratorList(){
        List<String> list = new ArrayList<>();
        list.add("aa");
        list.add("bb");
        list.add("cc");

//        //方法一：使用普通for循环
//        for(int i=0;i<list.size();i++){
//            System.out.println(list.get(i));
//        }

//        //方法二：使用增强for循环
//        //只是单纯的打印全部建议使用，要对内部元素操作不建议
//        for(String temp:list){
//            System.out.println(temp);
//        }

//        //方法三：使用for+迭代器遍历List
//        for(Iterator<String> iter = list.iterator();iter.hasNext();){
//            String temp = iter.next();
//            System.out.println(temp);
//        }

        //方法四：使用while+迭代器遍历List
        Iterator<String> iter = list.iterator();
        while(iter.hasNext()){
            String temp = iter.next();
            iter.remove();  //若遍历时要删除集合中的元素，建议使用这种方式
            System.out.println(temp);
        }
    }

    /* 测试遍历Set */
    public static void testIteratorSet(){
        Set<String> set = new HashSet<>();
        set.add("dd");
        set.add("ee");
        set.add("ff");

//        //方法一：使用增强for循环遍历Set
//        for(String temp:set){
//            System.out.println(temp);
//        }

        //方法二：使用for+迭代器遍历Set
        for(Iterator<String> iter = set.iterator();iter.hasNext();){
            String temp = iter.next();
            System.out.println(temp);
        }
    }

    public static void testIteratorMap(){
        Map<Integer,String> map = new HashMap<>();
        map.put(100,"gg");
        map.put(200,"hh");
        map.put(300,"ii");
        //使用迭代器遍历Map
        //方法一：使用for+迭代器+entrySet遍历Map
//        Set<Map.Entry<Integer,String>> set = map.entrySet();  //直接获取键值对，并转成Set
//        for(Iterator<Map.Entry<Integer,String>> iter = set.iterator();iter.hasNext();){
//            Map.Entry<Integer,String> temp = iter.next();
//            System.out.println(temp.getKey()+"---"+temp.getValue());

        //方法二：使用for+迭代器+keySet遍历Map
        Set<Integer> set = map.keySet();  //获取键，并转成Set
        for(Iterator<Integer> iter = set.iterator();iter.hasNext();){
            Integer key = iter.next();
            System.out.println(key+"---"+map.get(key));
        }
    }
}
